#include "usermessagemainwindow.h"
#include "ui_usermessagemainwindow.h"

UserMessageMainWindow::UserMessageMainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::UserMessageMainWindow)
{
    ui->setupUi(this);
    show_back_gif();
    //联系方式只接受数字的输入
    ui->PhonelineEdit->setValidator(new QRegExpValidator(QRegExp("\\d*"), this));
    ui->lab1->hide();//隐藏警告信息：请输入姓名
    ui->lab2->hide();//隐藏警告信息：请输入联系方式
    ui->lab3->hide();//隐藏警告信息：请输入性别

    widgetInit();
    write_User_message_lineEdit();

}

UserMessageMainWindow::~UserMessageMainWindow()
{
    delete ui;
}

//判断是否填写完整的用户信息--显示警告信息
int UserMessageMainWindow::judge_sigin_message()
{
    //姓名输入文本框为空
        if(ui->NamelineEdit->text().isEmpty())
        {
            ui->lab1->show();//显示警告信息：请输入姓名
        }
        //联系方式输入文本框为空
        if(ui->PhonelineEdit->text().isEmpty())
        {
            ui->lab2->show();//显示警告信息：请输入联系方式
        }
        //性别输入文本框为空
        if(ui->SexlineEdit->text().isEmpty())
        {
            ui->lab3->show();//显示警告信息：请输入性别
        }
        if(!ui->NamelineEdit->text().isEmpty()
            && !ui->PhonelineEdit->text().isEmpty()
            && !ui->SexlineEdit->text().isEmpty())
        {
            return 1;
        }
        return 0;
}

//显示动态背景图
void UserMessageMainWindow::show_back_gif()
{
    QMovie *movepic = new QMovie(QString::fromLocal8Bit(":/new/prefix1/back.gif"));
    movepic->setScaledSize(ui->backGif->size());
    ui->backGif->setMovie(movepic);
    movepic->start();
}

// 返回上个界面--功能界面
void UserMessageMainWindow::on_return_btn_clicked()
{
    //因为在跳转时，记录了上一个界面
    //所以可以利用此函数获取当前窗口的父窗口对象指针
    QWidget *parent = this->parentWidget();

    parent->show();//把之前父界面的隐藏状态改为显示状态，显示父界面
    this->close();//关闭当前界面
}

//软键盘隐藏
void UserMessageMainWindow::slotHideInput()
{
    eInput->hide();
}

//保存修改的用户信息
void UserMessageMainWindow::on_save_btn_clicked()
{
    //0.判断是否填写信息
    if(judge_sigin_message())
    {
        //将用户信息填写到文本文件中
        save_User_message_file();
        //因为在跳转时，记录了上一个界面
        //所以可以利用此函数获取当前窗口的父窗口对象指针
        QWidget *parent = this->parentWidget();

        parent->show();//把之前父界面的隐藏状态改为显示状态，显示父界面
        this->close();//关闭当前界面
    }
}

//创建界面时将文档用户信息显示到文本框中
void UserMessageMainWindow::write_User_message_lineEdit()
{
    //根据文件的操作来访问文件，QT中使用QFile类来描述对文件的操作
    /*
     第一步：根据路径，将文件转换成一个QFile对象
     第二步：打开文件，并指定打开文件的方式
     第三步：文件操作：读或者写
     第四步：关闭文件
    */
    QFile file(fileName);
    // 尝试以写入模式打开（如果文件不存在则创建）
    if (!file.open(QIODevice::ReadWrite)) {
        qDebug() << "无法创建或打开文件：" << file.errorString();
        return;
    }
    if(file.size() != 0)
    {
        QString line; //= file.readLine();  // 读取一行（自动去掉换行符）

        ui->NamelineEdit->setText( line = file.readLine().trimmed());
        printf("行内容:%s\n",line.toStdString().data());

        ui->PhonelineEdit->setText(line = file.readLine().trimmed());
        printf("行内容:%s\n",line.toStdString().data());

        ui->SexlineEdit->setText(line = file.readLine().trimmed());
        printf("行内容:%s\n",line.toStdString().data());
    }
    file.close();
}

//将保存的用户信息填写的文档中
void UserMessageMainWindow::save_User_message_file()
{
    QFile file(fileName);
    // 尝试以写入模式打开（如果文件不存在则创建）
    if (!file.open(QIODevice::WriteOnly)) {
        qDebug() << "无法创建或打开文件：" << file.errorString();
        return;
    }
    // 创建文本信息
    QString text = ui->NamelineEdit->text() + "\n" + ui->PhonelineEdit->text() + "\n" + ui->SexlineEdit->text();
    file.write(text.toStdString().data());
    file.close();
    printf("text:%s,%d,%d\n",text.toStdString().data(),text.size(),strlen(text.toStdString().data()));
}

//软键盘初始化
void UserMessageMainWindow::widgetInit()
{
    ui->centralwidget->installEventFilter(this);
    eInput = new easyInput(this);      //输入法实例化
    eInput->installEventFilter(this);  //安装事件过滤器
    inputFlag = true;
    ui->centralwidget->setFocus();   // 界面初始化时，先把焦点在menu处，否则输入法会先出现
}

//软键盘响应事件函数，点击文本框后输入文本信息
bool UserMessageMainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == this){
        static QPoint point;
        switch (event->type()) {
        case QEvent::MouseButtonPress:
            point.setY(cursor().pos().y());     // 记录按下点的y坐标
            eInput->hide();
            break;
        default:
            break;
        }
    }
    if(watched == eInput)
        switch (event->type()) {
        case QEvent::Hide:
            break;
        case QEvent::Show:
        {   //输入文本框是否获得焦点
            if (ui->NamelineEdit->hasFocus())
            {
                ui->lab1->hide();//隐藏警告信息：请输入姓名
            }
            if (ui->PhonelineEdit->hasFocus())
            {
                ui->lab2->hide();//隐藏警告信息：请输入联系方式
            }
            if (ui->SexlineEdit->hasFocus())
            {
                ui->lab3->hide();//隐藏警告信息：请输入性别
            }
            if(inputFlag == false){
                eInput->hide();
                return false;
            }
            //ui->textEdit->moveCursor(QTextCursor::End);//自动滑动到最后一行
        }
            break;
        default:
            break;
        }
    return QWidget::eventFilter(watched,event);//将事件传递给父类
}
